//处理时间格式
/***
 * 日期转化
 * @param time 时间 不能以 “2019-09-12”形式的日期
 * @param cFormat 需要转换的格式 以 {y}-{m}-{d}... 形式
 * @param isPepair 是否加0 比如： 8月 =》 08月
 * @returns {*} 转化后的字符串日期
 */
export function parseTime(time, cFormat, isPepair = true) {
    if (arguments.length === 0) {
        return null
    }

    // 获取系统时间
    var d = new Date();
    // 获取需要时区
    var utc = -(d.getTimezoneOffset() / 60);

    const format = cFormat || '{y}-{m}-{d} {h}:{i}:{s}'
    let date
    if (typeof time === 'object') {
        date = time
        //转换传入时间为本地时间
        date.setHours(date.getHours() + utc)
    } else {
        if (('' + time).length === 10) time = parseInt(time) * 1000
        if (!isNaN(time)) {
            time = parseInt(time)
            date = new Date(time)
            //转换传入时间为本地时间
            date.setHours(date.getHours() - utc)
        } else {
            date = new Date(time)
            //转换传入时间为本地时间
            date.setHours(date.getHours() + utc)
        }
    }

    const formatObj = {
        y: date.getFullYear(),
        m: date.getMonth() + 1,
        d: date.getDate(),
        h: date.getHours(),
        i: date.getMinutes(),
        s: date.getSeconds(),
        a: date.getDay()
    }
    const time_str = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => {
        let value = formatObj[key]
        // Note: getDay() returns 0 on Sunday
        if (key === 'a') { return ['日', '一', '二', '三', '四', '五', '六'][value] }

        if (isPepair && result.length > 0 && value < 10) {
            value = '0' + value
        }
        return value || 0
    })
    return time_str
}

/***
 * 计算当前日期的前几天/或后几天 是多少号
 * @param strDate 为字符串日期 如:'2019-01-01'
 * @param n  n为你要传入的参数，当前为0，前一天为-1，后一天为1
 * @returns {string}
 */
export function getDatePeriod(strDate, n) {
    const curDate = strDate.split('-'); //这边给定一个特定时间
    let newDate;
    newDate = new Date(curDate[0], curDate[1] - 1, curDate[2]);
    const beforeNow = newDate.getTime() + 1000 * 60 * 60 * 24 * parseInt(n); //计算前几天用减，计算后几天用加，最后一个就是多少天的数量
    let beforeDat = new Date;
    beforeDat.setTime(beforeNow);
    let befMonth = beforeDat.getMonth() + 1;
    let mon = befMonth >= 10 ? befMonth : '0' + befMonth;
    let befDate = beforeDat.getDate();
    let da = befDate >= 10 ? befDate : '0' + befDate;
    newDate = beforeDat.getFullYear() + '-' + mon + '-' + da;
    return newDate;
}

/***
 * 返回指定日期的前几天或后几天 (包括年月日)
 * 例如：getDate('2017-12-12','month',-2) 返回 2017-10-12 //找前2个月
 * @param type 需要 天||月||年
 * @param number 多少时间 负数为之前日期，正数为以后日期
 * @returns {string}
 */
export function getDate(time, type = null, number = 0) {
    var nowdate = time ? new Date(time) : new Date();
    switch (type) {
        case "day":   //取number天前、后的时间
            nowdate.setTime(nowdate.getTime() + (24 * 3600 * 1000) * number);
            var y = nowdate.getFullYear();
            var m = nowdate.getMonth() + 1;
            var d = nowdate.getDate();
            var retrundate = y + '-' + m + '-' + d;
            break;
        case "week":  //取number周前、后的时间
            var weekdate = new Date(nowdate + (7 * 24 * 3600 * 1000) * number);
            var y = weekdate.getFullYear();
            var m = weekdate.getMonth() + 1;
            var d = weekdate.getDate();
            var retrundate = y + '-' + m + '-' + d;
            break;
        case "month":  //取number月前、后的时间
            nowdate.setMonth(nowdate.getMonth() + number);
            var y = nowdate.getFullYear();
            var m = nowdate.getMonth() + 1;
            var d = nowdate.getDate();
            var retrundate = y + '-' + m + '-' + d;
            break;
        case "year":  //取number年前、后的时间
            nowdate.setFullYear(nowdate.getFullYear() + number);
            var y = nowdate.getFullYear();
            var m = nowdate.getMonth() + 1;
            var d = nowdate.getDate();
            var retrundate = y + '-' + m + '-' + d;
            break;
        default:     //取当前时间
            var y = nowdate.getFullYear();
            var m = nowdate.getMonth() + 1;
            var d = nowdate.getDate();
            var retrundate = y + '-' + m + '-' + d;
    }
    return retrundate;
}

/**
 * 日期排序
 * @param dateList 需要排序的日期数组
 * @param sortType 升序/降序  默认：升序 （asc/desc ）
 * @returns {boolean}
 */
export function dateListSort(dateList, sortType = "asc") {
    if (Array.isArray(dateList)) {
        if (sortType == 'asc') {
            return dateList.sort((a, b) => {
                return Date.parse(a) - Date.parse(b);
            });
        } else {
            return dateList.sort((a, b) => {
                return Date.parse(b) - Date.parse(a);
            });
        }
    }
    return [];
}

/***
 * 获得2个日期段的 - { 月份 } -份差
 * @param date1 日期 以(2019-10-12)格式
 * @param date2
 * @constructor
 */
export function dateShortMonth(date1, date2) {
    // 拆分年月日
    date1 = date1.split('-');
    // 得到月数
    date1 = parseInt(date1[0]) * 12 + parseInt(date1[1]);
    // 拆分年月日
    date2 = date2.split('-');
    // 得到月数
    date2 = parseInt(date2[0]) * 12 + parseInt(date2[1]);
    return Math.abs(date1 - date2);
}


/***
 * 把秒 转为 时分秒格式
 * @param s
 * @returns {*}
 */
export function secondTimerFormat(s) {
    let t,hour,min,sec,day;
    if(s > -1){
        hour = Math.floor(s/3600);
        min = Math.floor(s/60) % 60;
        sec = s % 60;
        day = parseInt(hour / 24);
        if (day > 0) {
            hour = hour - 24 * day;
            t = day + "day " + hour + ":";
        }
        else t = hour + ":";
        if(min < 10){t += "0";}
        t += min + ":";
        if(sec < 10){t += "0";}
        t += sec;
    }
    return t;
}
